package hx.front.manager.seeker;

import hx.engine.IUserEngine;
import hx.front.manager.SeekerAction;
import hx.model.dto.Role;
import hx.model.dto.User;
import hx.model.util.HXCollections;
import hx.model.util.HXKeys;

import java.util.ArrayList;
import java.util.Collection;

/**
 * @author Kineas
 * 
 */
@SuppressWarnings("serial")
public class UserSeeker extends SeekerAction {

	private static final String USER_SEEKER = "buscadorUsuarios";
	private static final String USER_EDITOR = "crearUsuarios";
	
	private String user;
	private Collection<Role> roleList = new ArrayList<Role>();
	private Collection<User> userList = null;
	private String filterName;
	private String filterRole;
	private Integer filterPersonality;
	
	private IUserEngine userEngine;

	@Override
	public String execute() throws Exception {
		setUser((String) getSession().get(HXKeys.LOGGED_USER));
		loadCollections();
		return USER_SEEKER;
	}

	@Override
	public String search() {
		// Deshacemos el null de listaUsuarios para mostrar el div del listado
		// encontremos o no resultados con las queries
		userList = new ArrayList<User>();

		//FIXME: Darle coherencia a esto. 15-02-2009
		
		User filtroUsuario = new User();
		
		// Fetch usando el filtro sobre la tabla usuario
		if (getFilterName()!=null)
			filtroUsuario = userEngine.getById(getFilterName());
		
		userList.add(filtroUsuario);

		// Fetch usando el filtro sobre la tabla personalidad, recorremos la
		// lista resultado recuperando todos los usuarios que coincidan con las
		// personalidades obtenidas. Hacemos esto cuando los filtros contienen
		// algo.
//		Personality filterPersonality = new Personality();
//		filterPersonality.setRole(Role.valueOf(getFilterRole()));
//		
//		userList = userEngine.findByPersonality(filterPersonality);
		
//		loadCollections();
		
		return USER_SEEKER;		
	}


	/**
	 * Redirige al editor de usuarios
	 * @return Action al editor de usuarios.
	 * @throws Exception
	 */
	public String crear() throws Exception {	
		return USER_EDITOR;
	}
	
	
	@Override
	protected void loadCollections() {
		setRoleList(HXCollections.ROLE_LIST);
	}
	
	// =========== Getters and Setters
	
	// User
	public void setUser(String usuario) { this.user = usuario; }
	public String getUser() { return user; }

	// RoleList
	public void setRoleList(Collection<Role> listaRoles) { this.roleList = listaRoles; }
	public Collection<Role> getRoleList() { return roleList; }

	// FilterName
	public void setFilterName(String nombre) { this.filterName = nombre; }
	public String getFilterName() { return filterName; }

	// FilterRole
	public void setFilterRole(String filtroRol) { this.filterRole = filtroRol; }
	public String getFilterRole() { return filterRole; }

	// FilterPersonality
	public void setFilterPersonality(Integer filtroPersonalidad) { this.filterPersonality = filtroPersonalidad; }
	public Integer getFilterPersonality() { return filterPersonality;}

	// UserList
	public void setUserList(Collection<User> userList) { this.userList = userList; }
	public Collection<User> getUserList() { return userList; }

	public IUserEngine getUserEngine() {
		return userEngine;
	}

	public void setUserEngine(IUserEngine userEngine) {
		this.userEngine = userEngine;
	}
	
	

}
